Introducción

Para realizar esta tarea se utilizan los conjuntos de datos registrados sobre la presencia de orquídeas (familia Orchidaceae) y las áreas silvestres protegidas (ASP) de Costa Rica.


Preparativos

Cargar los paquetes

library(sf)
library(leaflet)
library(leaflet.extras)
library(leafem)
library(dplyr)
library(raster)

Cargar los datos

Paso 1

Cargar la capa sobre los registros de orquídeas en Costa Rica.

# Carga de la capa de orquídeas (familia Orchidaceae)
orquideas <-
  st_read(
    "https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/gbif/orchidaceae-cr-registros.csv",
    options = c(
      "X_POSSIBLE_NAMES=decimalLongitude",
      "Y_POSSIBLE_NAMES=decimalLatitude"
    ),
    quiet = TRUE
  )
Asignación del sistema de coordenadas.
st_crs(orquideas) <- 4326


Paso 2

Cargar la capa sobre los registros de las áreas silvestres protegidas en Costa Rica.

# Carga de la capa de áreas silvestres protegidas (ASP)
asp <-
  st_read(
    "https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/sinac/asp/asp-wgs84.geojson",
    quiet = TRUE
  )
Asignación del sistema de coordenadas.
st_crs(asp) <- 4326


Ver la cantidad de registros original.

cat("cantidad original de registros: ", nrow(orquideas))
## cantidad original de registros:  29863


Limpieza del conjunto de datos

Paso 1

Eliminar los registros con un valor de incertidumbre en la ubicación mayor a 1000 m.

# Descartar registros con alta incertidumbre 
orquideas <- 
  orquideas %>%
  filter(coordinateUncertaintyInMeters <= 1000)


Paso 2

Eliminar los registros con valor vacío o NA en el campo de la especie.

# Eliminar vacios y NA
orquideas <-
  orquideas %>%
  filter(!is.na(species) & species != "") 


Paso 3

En el conjunto de datos de ASP, eliminar los registros que presenten valor de “Area Marina de Manejo” o “Area marina protegida”.

# Eliminar los registros que presenten valor de “Area Marina de Manejo” o “Area marina protegida”
asp_terrestres <-
  asp %>%
  filter(descripcio != "Area Marina de Manejo") %>%
  filter(descripcio != "Area marina protegida") %>%
  st_transform(crs = 4326)


Ver la cantidad de registros restantes.

cat("Cantidad de registros despues de realizar los cambios: ", nrow(orquideas))
## Cantidad de registros despues de realizar los cambios:  20926


Mapa Leaflet

Paso 1

Creación de un conjunto de datos con la cantidad de especies por área silvestre protegida.

# Conjunto de datos de especies por asp
asp_especies <-
  asp_terrestres %>%
  st_join(orquideas) %>%
  group_by(nombre_asp) %>%
  summarize(especies = n_distinct(species, na.rm = TRUE)) 


Paso 2

Crear una paleta con la coloración adecuada.

# Paleta de colores
colores_especies <-
  colorNumeric(
    palette = "Reds",
    domain = asp_especies$especies,
    na.color = "transparent"
  )


Paso 3

Crear un mapa leaflet para visualizar el resultado.

# Mapa Leaflet
leaflet() %>%
  addTiles(group = "OpenStreetMap") %>%
  addPolygons(
    data = asp_especies,
    fillColor = ~ colores_especies(asp_especies$especies),
    fillOpacity = 0.7,
    stroke = TRUE,
    color = "black",
    weight = 1,
    popup = paste(
      paste(
        "<strong>Area silvestre protegida:</strong>",
        asp_especies$nombre_asp
      ),
      paste(
        "<strong>Cantidad de especies registradas:</strong>",
        asp_especies$especies
      ),
      sep = '<br/>'
    ),
    group = "Especies por asp"
  ) %>%
  addCircleMarkers(
    data = orquideas,
    stroke = F,
    radius = 2,
    fillColor = 'red',
    fillOpacity = 0.6,
    popup = paste(
      orquideas$species,
      orquideas$family
    ),
    clusterOptions = markerClusterOptions(),
    group = "Orquídeas"
  ) %>%
  addLayersControl(baseGroups = c("OpenStreetMap"),
                   overlayGroups = c("Especies por asp", "Orquídeas")) %>%
  addLegend(
    position = "bottomleft",
    pal = colores_especies,
    values = asp_especies$especies,
    group = "Especies por asp",
    title = "Cantidad de especies"
  ) %>%
  addResetMapButton() %>%
  addMouseCoordinates()